#ifndef CLERC_H
#define CLERC_H

#include "Classe.h"
using namespace std;

/**
 * Cette classe implémente le clerc de l'univers AD&D.
 * @author Johan "Solo" Luisier
 */
class Clerc : public Classe
{
 protected:
  static const unsigned int nbr_comp, /**< Nombre de compétences disponibles */
    nbr_restric; /**<  Nombre de restritions disponibles */
  static const vector<ListComp> Comp, /**< Liste de compétences @see ListComp */
    Restric; /**< Liste de restrictions @see ListCom */
  /**
   * Liste des caractéristiques minimales pour devenir un Clerc.
   */
  static const vector< Prerequis > Limites;
  /**
   * Ensemble des races autorisées pour cette Classe.
   */
  static const set< string > RacesAdmises;
  /**
   * Ensemble de compétences secondaires.
   */
  static const vector< ListComp > ChgtForme;
  /**
   * Ensemble de compétences secondaires.
   */
  static const vector< ListComp > CtrlEsprit;
  /**
   * Ensemble de compétences secondaires.
   */
  static const vector< ListComp > ImmuCharme;
  /**
   * Ensemble de compétences secondaires.
   */
  static const vector< ListComp > PouvDivins;
  void calculNiveau();
  unsigned int calculeTAc0() const;
  void calculNivMag();
 public:
  Clerc(unsigned int xp, unsigned int trait[7], unsigned int& PP,
	const string& race);
  Clerc(unsigned int xp, unsigned int trait[7], const string& race);
  Clerc(unsigned int trait[7], const bool& UI, const string& race);
  ~Clerc();
  void getJS(unsigned int *tab) const;
  void ecrireSorts(const string& nom_fichier, const bool& ecrase) const;
  void nbrSort(unsigned int sorts[], const unsigned int& taille) const;
  void getPrixAcces(map<string, unsigned int>*& Map) const;
  bool forceExceptionnelle() const;
};

#endif
